import { defineStore } from 'pinia'
import { ref } from 'vue'

type ReviewStatus = {
  code: string
  name: string
}

type UserType = {
  code: string
  name: string
}

type ContactPersonInfo = {
  // 根据 contactPersonInfoDtoList 的结构，如果有更多字段可以扩展
  // 当前示例中是空数组，因此这里没有具体字段
}

type UserInfo = {
  address: string | null
  avatar: string | null
  certNo: string | null
  city: string | null
  companyName: string | null
  contactPersonInfoDtoList: ContactPersonInfo[]
  district: string | null
  id: string
  mobile: string
  name: string | null
  province: string | null
  relationId: string | null
  reviewStatus: ReviewStatus
  sex: string | null
  socialCreditCode: string | null
  userType: UserType
  username: string
  accessToken: string
  refreshToken: string
}

// 初始用户数据，可用户初始化
const initState = {
  address: null,
  avatar: null,
  certNo: null,
  city: null,
  companyName: null,
  contactPersonInfoDtoList: [], // 空数组
  district: null,
  id: '', // 空字符串，表示没有值（也可以使用 null，根据需求）
  mobile: '',
  name: null,
  province: null,
  relationId: null,
  reviewStatus: null, // 空的 ReviewStatus
  sex: null,
  socialCreditCode: null,
  userType: null, // 空的 UserType
  username: '',
  accessToken: '', // 空的 accessToken
  refreshToken: '' // 空的 refreshToken
}

export const useUserStore = defineStore(
  'user',
  // Setup Store 写法，Vue3 推荐用这个种方法写
  () => {
    const userInfo = ref<UserInfo>({ ...initState })

    // 设置用户信息 可设置部分信息（比如更新 token）
    const setUserInfo = (val): void => {
      userInfo.value = { ...userInfo.value, ...val }
    }

    // 清除用户信息
    const clearUserInfo = (): void => {
      userInfo.value = { ...initState }
      uni.redirectTo({ url: '/pages/login/index' })
    }

    // 获取页面权限信息
    const getUserPermissionKeys = computed(() => {
      const permissionKeys: string[] = []
      // 是登录
      if (!!userInfo.value.accessToken && !!userInfo.value.refreshToken) {
        permissionKeys.push('logined')
      }
      // 是否为 vip
      // if (userInfo.value.isVip) {
      //   permissionKeys.push('vip')
      // }
      // 可以继续加你需要的权限判定 ...
      return permissionKeys
    })

    // 获取用户按钮权限
    const getUserBtnPermission = computed(() => {
      return []
    })

    return {
      userInfo,
      setUserInfo,
      clearUserInfo,
      getUserPermissionKeys,
      getUserBtnPermission
    }
  },
  {
    persist: true // 是否持久化
  }
)
